/**
 * 加载配置并应用到界面
 *
 * 该函数会从保存的配置对象中获取第一个配置项，
 *
 * 并将其应用到界面上。若没有保存的配置，则应用空配置。
 */
async function loadConfig() {
    /**
     * 获取保存的配置对象的所有键名
     */
    const configKeys = Object.keys(savedLunaraConfigs);
    /**
     * 获取第一个配置键名
     */
    const firstConfigKey = configKeys[0];
    /**
     * 根据第一个配置键名获取对应的配置，若没有键名则设为 null
     */
    const currentLunaraConfig = firstConfigKey ? savedLunaraConfigs[firstConfigKey] : null;
    // 若存在当前配置，则将其应用到界面
    if (currentLunaraConfig) await applyConfigToUI(currentLunaraConfig);
    // 若不存在当前配置，则将空配置应用到界面
    else await applyConfigToUI({});
    // 设置当前配置名称
    currentConfigName = firstConfigKey;
};

/**
 * 创建 Live2D 状态选择下拉框的选项
 *
 * 此函数会从 EmotionalState 中获取所有大写的 getter 方法，
 *
 * 并为每个 getter 创建一个 option 元素添加到 live2dStateDropdown 下拉选择框中
 */
function createLive2dStateSelect() {
    /**
     * 从 EmotionalState 获取所有大写的 getter 方法
     */
    const allUppercaseGetters = EmotionalState.getAllUppercaseGetters();
    // 遍历所有大写的 getter 方法
    allUppercaseGetters.forEach(
        getter => {
            /**
             * 创建一个新的 option 元素
             */
            const option = document.createElement("option");
            // 设置 option 的值为模型的 id，通过 EmotionalState 的 getter 获取
            option.value = EmotionalState[getter];
            // 设置 option 显示的文本为模型的对应名称，通过双重索引 EmotionalState 获取
            option.textContent = EmotionalState[EmotionalState[getter]];
            // 将创建的 option 元素添加到 live2dStateDropdown 下拉选择框中
            live2dStateDropdown.appendChild(option);
        }
    );
};

/**
 * 加载系统语音模型
 * 检查浏览器是否支持系统 TTS 功能，若支持则加载语音模型选择项，若不支持则给出提示并切换语音引擎
 */
function loadSystemSpeechModel() {
    // 检查浏览器是否支持系统语音合成功能
    if ("speechSynthesis" in window) {
        // 当可用语音列表改变时，加载语音模型选择项并移除事件监听器
        speechSynthesis.onvoiceschanged = () => {
            loadSystemSpeechModelVoiceSelect();
            speechSynthesis.onvoiceschanged = null;
        };
        // 立即加载语音模型选择项
        loadSystemSpeechModelVoiceSelect();
    }
    else {
        // 设置 TTS 支持指示器的样式为不支持状态
        ttsSupportIndicator.className = "tts-support-indicator tts-not-supported";
        // 在 TTS 支持指示器中显示浏览器不支持系统 TTS 功能的提示
        ttsSupportIndicator.innerHTML = '<i class="fas fa-exclamation-triangle"></i> 浏览器不支持系统 TTS 功能';
        // 若当前使用的是系统语音引擎，则切换到自定义语音引擎
        if (currentSpeechEngineType === "system") switchSpeechEngineMode("custom");
    }
};